home *** CD-ROM | disk | FTP | other *** search
/ Windows News 2010 Summer - Disc 1 / WN_Ete2010_CD1.iso / Onglet5 / Weezo / Weezo setup.exe / {code_appDir} / www / js / loginCoverflow-src.js < prev    next >
Text File  |  2010-05-19  |  7KB  |  204 lines

  1. var step=0,sub=10,hintCurrent,target,pos=0,dMask,dMaskSel,dMaskOff,dMaskPickDate,dMaskPickX,animTO=0;
  2. function init(){
  3.     setPos(udSN)
  4.     if(users[pos]['reqUser']) dgi('loginUserInput').focus();
  5.     else if(users[pos]['password']) dgi('loginPasswordInput').focus();
  6.     wl.setKeycodeListener(dgi('loginUserInput'),userInputKD)
  7.     wl.setKeycodeListener(dgi('loginPasswordInput'),passwordInputKD,'onkeyup')
  8. }
  9. function userInputKD(kc,n,e){if(kc==13 && n.value) dgi('loginPasswordInput').focus();}
  10. function passwordInputKD(kc,n,e){
  11.     if(kc==13 && n.value) login()
  12.     return;
  13.     if(e.shiftKey) shiftDown=1; else shiftDown=0;
  14.     if(kc>=65 && kc<=90) kc=n.value.charCodeAt(n.value.length-1)
  15.     if((kc>=65 && kc<=90 && !shiftDown) || (kc>=97 && kc<=123 && shiftDown)) capsLockShowWarning(n);
  16. }
  17. function resetInputs(){
  18.     if(dgi("encryptionLockSend")) dgi("encryptionLockSend").style.display="none";
  19.     dgi("loginPasswordInput").value="";
  20.     loginSetError('');
  21.     dgi("loginUserInput").value="";
  22.     wl.button.enable(dgi('loginBt'));
  23. }
  24. function loginSetError(txt){
  25.     dgi('loginError').innerHTML=txt;
  26.     fade(dgi('loginError'))
  27. }
  28. function login(){
  29.     var id=Math.round(pos);
  30.     if(users[id]['reqUser'] && !dgi('loginUserInput').value){
  31.         dgi('loginUserInput').focus();
  32.         return;
  33.     }
  34.     if(users[id]['password'] && !dgi('loginPasswordInput').value && !users[id]['reqUser']) {
  35.         dgi('loginPasswordInput').focus();
  36.         return;
  37.     }
  38.     wl.button.disable(dgi('loginBt'));
  39.     if(users[id]['reqUser']) logUserByName(dgi('loginUserInput').value,dgi('loginPasswordInput').value);
  40.     else logUserById(users[id]['id'],((users[id]['password'])?dgi('loginPasswordInput').value:false))
  41. }
  42. function goPos(p,noLog){
  43.     var dec=5;
  44.     if(p!==undefined) {
  45.         if((Math.abs(pos-p)<0.1 || p==target)&& !noLog) return login();
  46.         target=p;
  47.     }
  48.     wl.adaptedTimeoutValueStart()
  49.     if(Math.abs(pos-target)<0.03) pos=target;
  50.     setPos(target/dec+(dec-1)*pos/dec)
  51.     dgi('loginError').style.visibility='hidden';
  52.     if(pos!=target) animTO=setTimeout('goPos()',wl.adaptedTimeoutValue(25));
  53.     else {
  54.         animTO=0;
  55.         if(users[pos]['reqUser']) dgi('loginUserInput').focus();
  56.         else if(users[pos]['password']) dgi('loginPasswordInput').focus();
  57.         else dgi('noFocus').focus();
  58.     }
  59. }
  60. /**
  61.  * Return x coordinate of center of item number i for global position p. x
  62.  */
  63. function f(p,i){
  64.     return -(p-i)*58*(1+Math.exp(-(p-i)*(p-i)/10));
  65. }
  66. /**
  67.  * Invert f function
  68.  */
  69. function inv(x,i){
  70.     x+=66;
  71.     var l=0,u=nb-1,m,it=0;
  72.     if(f(l,i)<x) return (-Math.sqrt(Math.abs((x-f(l,i))/100)))
  73.     if(f(u,i)>x) return (u+Math.sqrt(Math.abs((x-f(u,i))/100)))
  74.     while(Math.abs(u-l)>0.01 && it<50){
  75.         m=(u+l)/2;
  76.         if(f(m,i)<x) u=m; else l=m;
  77.         it++;
  78.     }
  79.     return m;
  80. }
  81.  
  82. /**
  83.  * Set position of all covers
  84.  * float p ranges from 0 to nb of items-1. p can be < 0 or > nb-1 if user goes out of bounds
  85.  */
  86. function setPos(p){
  87.     var i,l,u,hw,hh,sz,sel,h1,h2;
  88.     pos=p;
  89.     for(i=0;i<nb;i++){
  90.         sz=32*(1+1.5*Math.exp(-(p-i)*(p-i)/10));
  91.         w=Math.floor(133*sz/80);
  92.         hw=Math.floor(133*sz/160);
  93.         h=Math.floor(166*sz/80);
  94.         hh=Math.floor(166*sz/160);
  95.         x=f(p,i);
  96.  
  97.         // Pos
  98.         with((n=dgi('l'+i)).style){left=(x-w/2)+"px"; zIndex=Math.round(sz);    top=(-hh)+"px";}
  99.  
  100.         if(w!=n.style.width){
  101.             // Div
  102.             with(n.style){width=w+"px";height=w+"px"}
  103.             // Mask
  104.             with((n=n.firstChild).style){width=w+"px"; height=h+"px";}
  105.             // Image
  106.             with((n=n.nextSibling).style){width=sz+"px"; height=sz+"px"; top=((w-sz)/2)+"px"; left=((w-sz)/2)+"px";}
  107.             // Label
  108.             n.nextSibling.style.fontSize=(100*sz/80)+'%'
  109.         }
  110.     }
  111.     l=Math.min(Math.max(Math.floor(p),0),nb-1)
  112.     u=Math.min(Math.max(Math.ceil(p),0),nb-1)
  113.  
  114.     // password alpha & height
  115.     try{alpha=Math.min(1,(1-p+l)*users[l]['password']+(1-u+p)*users[u]['password']);} catch(err){alpha=1} // unknown error WA. To be fixed
  116.     setAlpha(dgi('loginPasswordLb'),alpha);
  117.     setAlpha(dgi('loginPasswordInput'),alpha);
  118.     dgi('loginPasswordGroup').style.height=(Math.max(1,(35*alpha)))+'px'
  119.  
  120.     // user input alpha & height
  121.     if(!users[l]['reqUser']) users[l]['reqUser']=0;
  122.     if(!users[u]['reqUser']) users[u]['reqUser']=0;
  123.     alpha=Math.min(1,(1-p+l)*users[l]['reqUser']+(1-u+p)*users[u]['reqUser']);
  124.     setAlpha(dgi('loginUserLb'),alpha);
  125.     setAlpha(dgi('loginUserInput'),alpha);
  126.     dgi('loginUserGroup').style.height=(Math.max(1,(35*alpha)))+'px'
  127.  
  128.     // Hint
  129.     if(p<0) l=u=p=0;
  130.     if(p>nb-1) l=u=p=nb-1;
  131.     alpha=Math.max(0,Math.min(1,(1-p+l-0.5)*((users[l]['hint'])?1:0)+(1-u+p-0.5)*((users[u]['hint'])?1:0)));
  132.     sel=Math.round(pos)
  133.     if(p==sel) h=(users[sel] && users[sel].hint)?users[sel].hint:'';
  134.     if(p-sel>0){
  135.         h1=(users[sel] && users[sel].hint)?users[sel].hint:'';
  136.         h2=(users[u] && users[u].hint)?users[u].hint:'';
  137.         h=h1.substr(Math.floor(h1.length*(1-u+p)))+''+h2.substr(0,Math.floor(h2.length*(1-u+p)));
  138.         if(h1&&h2) alpha=1;
  139.     }
  140.     if(p-sel<0){
  141.         h1=(users[l] && users[l].hint)?users[l].hint:'';
  142.         h2=(users[sel] && users[sel].hint)?users[sel].hint:'';
  143.         if(users[l])
  144.             h=h1.substr(Math.floor(h1.length*(p-l)))+''+h2.substr(0,Math.floor(h2.length*(p-l)));
  145.         else h=h2;
  146.         if(h1&&h2) alpha=1;
  147.  
  148.     }
  149.     if(h!=hintCurrent)    dgi('loginHint').innerHTML=hintCurrent=h;
  150.     if(phpBrowser=='ie') alpha=Math.ceil(alpha);
  151.     setAlpha(dgi('loginHintGroup'),alpha);
  152.     dgi('loginBox').style.height=(Math.max(0,(20*alpha)))+'px'
  153. }
  154.  
  155. // Get item below mouse
  156. function getItemBelowMouse(){
  157.     var n,l,t,it=-1,i,maxZ=-999;
  158.     for(i=0;i<nb;i++){
  159.         n=dgi('l'+i);
  160.         l=actualOffsetLeft(n);    t=actualOffsetTop(n);
  161.         if(l<=mouseX && l+n.offsetWidth>=mouseX && t<=mouseY && t+n.offsetHeight>=mouseY){
  162.             if(n.style.zIndex>maxZ){maxZ=n.style.zIndex; it=i}
  163.         }
  164.     }
  165.     return it;
  166. }
  167. // Called on mouse down on mask
  168. function dMaskPick(e){
  169.     dMaskPickDate=wl.chrono.microtime();
  170.     dMaskPickX=mouseX;
  171.     dMaskSel=getItemBelowMouse();
  172.     if(dMaskSel==-1) return;
  173.     if(animTO) W.clearTimeout(animTO);
  174.     animTO=0;
  175.     dMaskOff=mouseX-actualOffsetLeft(dgi('l'+dMaskSel));
  176.     var p=inv(mouseX+0-actualOffsetLeft(dgi('loginCenterPos'))-dMaskOff,dMaskSel);
  177. }
  178. function dMaskDrag(e){
  179.     if(dMaskSel==-1) return;
  180.     setPos(inv(mouseX-actualOffsetLeft(dgi('loginCenterPos'))-dMaskOff,dMaskSel))
  181. }
  182.  
  183. // Click / drop
  184. function dMaskDrop(){
  185.     if(dMaskSel==-1) return;
  186.     // Click
  187.     if((wl.chrono.microtime()-dMaskPickDate)<300 && Math.abs(mouseX-dMaskPickX)<6) {
  188.         goPos(dMaskSel)
  189.     }
  190.     // Drop
  191.     else{
  192.         var p;
  193.         if(pos>nb-1) p=Math.ceil(nb-1-(pos-nb+1)/1.5);
  194.         else if(pos<0) p=Math.floor(-pos/1.5);
  195.         else p=Math.round(inv(mouseX+mouseVX/10-actualOffsetLeft(dgi('loginCenterPos'))-dMaskOff,dMaskSel))
  196.         p=Math.min(Math.max(p,0),nb-1)
  197.         goPos(p,1)
  198.     }
  199.     dMaskSel=-1;
  200. }
  201. /**
  202.  * Called by wz_dragdrop.js on object drop (after a click on a coverflow item)
  203.  */
  204. function preDrop(){dMaskDrop()}